﻿(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        factory(require("jquery"), window, document);
    } else {
        factory(jQuery, window, document);
    }
}(function ($, h, c, undefined) {
    // code for attaching tipso to whatever jQuery was passed in goes here.
    var a = $([]),
            e = $.resize = $.extend($.resize, {}),
            i,
            k = "setTimeout",
            j = "resize",
            d = j + "-special-event",
            b = "delay",
            f = "throttleWindow";
    e[b] = 250;
    e[f] = true;
    $.event.special[j] = {
        setup: function () {
            if (!e[f] && this[k]) { return false }
            var l = $(this); a = a.add(l);
            $.data(this, d, { w: l.width(), h: l.height() });
            if (a.length === 1) { g() }
        },
        teardown: function () {
            if (!e[f] && this[k]) { return false }
            var l = $(this); a = a.not(l);
            l.removeData(d);
            if (!a.length) { clearTimeout(i) }
        },
        add: function (l) {
            if (!e[f] && this[k]) { return false }
            var n;
            function m(s, o, p) {
                var q = $(this),
                    r = $.data(this, d);
                r.w = o !== c ? o : q.width();
                r.h = p !== c ? p : q.height();
                n.apply(this, arguments)
            } if ($.isFunction(l)) {
                n = l; return m
            }
            else {
                n = l.handler; l.handler = m
            }
        }
    };
    function g() {
        i = h[k](
            function () {
                a.each(function () {
                    var n = $(this),
                        m = n.width(),
                        l = n.height(),
                        o = $.data(this, d);
                    if (m !== o.w || l !== o.h) {
                        n.trigger(j, [o.w = m, o.h = l])
                    }
                }); g()
            }, e[b])
    }
    
}));
